/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package camada.bancodedados.daoimplemente;

import eloma.classe.ContasLivroCaixa;
import eloma.classe.LivroCaixa;
import camada.bancodedados.conexao.Conexao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Eloma
 */
public class LivroCaixaDAOImpl {

    public void inserir(LivroCaixa caixa) {
        PreparedStatement pstm = null;
        try {
            final String SQL_INSERT
                    = "insert into livrocaixa(mes,ano)values(?,?)";
            pstm = Conexao.getCon().prepareStatement(SQL_INSERT);
            pstm.setInt(1, caixa.getMes());
            pstm.setInt(2, caixa.getAno());
            pstm.executeUpdate();
        } catch (SQLException e) {
            System.out.println("Erro ao inserir dados!!!\n" + e.getMessage());
        }
    }

    public List<LivroCaixa> findAll() throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String SQL_STATEMENT = "Select * from LivroCaixa";
        try {
            stmt = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_STATEMENT);
            rs = stmt.executeQuery();
            return carregarMultiplosResultados(rs);
        } catch (SQLException sqle) {
            throw new Exception(sqle);
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
        }
    }

    public List<ContasLivroCaixa> bucarTodasContasLivroCaixa() throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String SQL_STATEMENT = "Select * from ContasLivroCaixa";
        try {
            stmt = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_STATEMENT);
            rs = stmt.executeQuery();
            return carregarMultiplosResultadosContasLivroCaixa(rs);
        } catch (SQLException sqle) {
            throw new Exception(sqle);
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
        }
    }

    public List<LivroCaixa> carregarMultiplosResultados(ResultSet rs) throws SQLException {
        List<LivroCaixa> resultList = new ArrayList<LivroCaixa>();
        while (rs.next()) {
            LivroCaixa dto = new LivroCaixa();
            carregarVO(dto, rs);
            resultList.add(dto);
        }
        return resultList;
    }

    private LivroCaixa carregarResultadoSimples(ResultSet rs) throws SQLException {
        if (rs.next()) {
            LivroCaixa dto = new LivroCaixa();
            carregarVO(dto, rs);
            return dto;
        } else {
            return null;
        }
    }

    private void carregarVO(LivroCaixa dto, ResultSet rs) throws SQLException {
        dto.setIdLivroCaixa(rs.getInt("IdLivroCaixa"));
        dto.setMes(rs.getInt("Mes"));
        dto.setAno(rs.getInt("Ano"));
        dto.setSaldo(rs.getDouble("Saldo"));
    }

    private List<ContasLivroCaixa> carregarMultiplosResultadosContasLivroCaixa(ResultSet rs) throws SQLException {
        List<ContasLivroCaixa> resultList = new ArrayList<ContasLivroCaixa>();
        while (rs.next()) {
            ContasLivroCaixa dto = new ContasLivroCaixa();
            carregarVOConta(dto, rs);
            resultList.add(dto);
        }
        return resultList;
    }

    private void carregarVOConta(ContasLivroCaixa dto, ResultSet rs) throws SQLException {
        dto.setIdContasLivroCaixa(rs.getInt("IdContaLivroCaixa"));
        dto.setData(rs.getDate("Data"));
        dto.setDescricao(rs.getString("Descricao"));
        dto.setEntrada(rs.getDouble("Entrada"));
        dto.setSaida(rs.getDouble("Saida"));
    }

}
